{
  "name": "kumachan",
  "rules": {
    "source_file": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "ns"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "stmt"
          }
        }
      ]
    },
    "ns": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "namespace"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "name"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "::"
        }
      ]
    },
    "name": {
      "type": "PATTERN",
      "value": "[^0-9\\{\\}\\[\\]\\(\\)\\.,:;@\\&\\|\\\\'\"` \\t\\r　\\n][^\\{\\}\\[\\]\\(\\)\\.,:;@\\&\\|\\\\'\"` \\t\\r　\\n]*"
    },
    "stmt": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "decl_entry"
        },
        {
          "type": "SYMBOL",
          "name": "decl_type"
        },
        {
          "type": "SYMBOL",
          "name": "decl_func"
        },
        {
          "type": "SYMBOL",
          "name": "decl_const"
        },
        {
          "type": "SYMBOL",
          "name": "decl_method"
        }
      ]
    },
    "decl_entry": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "entry"
        },
        {
          "type": "SYMBOL",
          "name": "block"
        }
      ]
    },
    "decl_type": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "docs"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "type"
        },
        {
          "type": "SYMBOL",
          "name": "name"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "type_params"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "impl"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "type_def"
        }
      ]
    },
    "type_params": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "name"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "name"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "docs": {
      "type": "REPEAT1",
      "content": {
        "type": "SYMBOL",
        "name": "doc"
      }
    },
    "doc": {
      "type": "PATTERN",
      "value": "\\/\\/\\/[^\\n]*"
    },
    "impl": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "ref_base"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "ref_base"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "ref_base": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "ns_prefix"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "name"
        }
      ]
    },
    "ns_prefix": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "name"
        },
        {
          "type": "STRING",
          "value": "::"
        }
      ]
    },
    "type_def": {
      "type": "CHOICE",
      "members": [
        {
          "type": "STRING",
          "value": "native"
        },
        {
          "type": "SYMBOL",
          "name": "record"
        },
        {
          "type": "SYMBOL",
          "name": "interface"
        },
        {
          "type": "SYMBOL",
          "name": "union"
        },
        {
          "type": "SYMBOL",
          "name": "enum"
        }
      ]
    },
    "record": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "record"
        },
        {
          "type": "SYMBOL",
          "name": "record_def"
        }
      ]
    },
    "record_def": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "field"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "field"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "field": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "docs"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "name"
        },
        {
          "type": "SYMBOL",
          "name": "type"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "field_default"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "field_default": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "default"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "expr"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "interface": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "interface"
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "method"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "method"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "method": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "docs"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "name"
        },
        {
          "type": "SYMBOL",
          "name": "type"
        }
      ]
    },
    "union": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "union"
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "type"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "type"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "enum": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "enum"
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "enum_item"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "enum_item"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "enum_item": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "docs"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "name"
        }
      ]
    },
    "decl_func": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "docs"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "function"
            },
            {
              "type": "STRING",
              "value": "operator"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "variadic"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "name"
        },
        {
          "type": "SYMBOL",
          "name": "sig"
        },
        {
          "type": "SYMBOL",
          "name": "body"
        }
      ]
    },
    "sig": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "type_params"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "inputs"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "implicit"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "output"
        }
      ]
    },
    "inputs": {
      "type": "SYMBOL",
      "name": "record_def"
    },
    "implicit": {
      "type": "SYMBOL",
      "name": "inputs"
    },
    "output": {
      "type": "SYMBOL",
      "name": "type"
    },
    "body": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "native_body"
        },
        {
          "type": "SYMBOL",
          "name": "block"
        }
      ]
    },
    "native_body": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "native"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "text"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "decl_const": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "docs"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "const"
        },
        {
          "type": "SYMBOL",
          "name": "name"
        },
        {
          "type": "SYMBOL",
          "name": "type"
        },
        {
          "type": "SYMBOL",
          "name": "body"
        }
      ]
    },
    "decl_method": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "docs"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "method"
        },
        {
          "type": "SYMBOL",
          "name": "receiver"
        },
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "SYMBOL",
          "name": "name"
        },
        {
          "type": "SYMBOL",
          "name": "type"
        },
        {
          "type": "SYMBOL",
          "name": "body"
        }
      ]
    },
    "receiver": {
      "type": "SYMBOL",
      "name": "name"
    },
    "type": {
      "type": "SYMBOL",
      "name": "ref"
    },
    "ref": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "ref_base"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "type_args"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "type_args": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "type"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "type"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "expr": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "cast"
          }
        },
        {
          "type": "SYMBOL",
          "name": "term"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "pipe"
          }
        }
      ]
    },
    "cast": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "SYMBOL",
          "name": "type"
        },
        {
          "type": "STRING",
          "value": "]"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "pipe": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "pipe_call"
        },
        {
          "type": "SYMBOL",
          "name": "pipe_infix"
        },
        {
          "type": "SYMBOL",
          "name": "pipe_cast"
        },
        {
          "type": "SYMBOL",
          "name": "pipe_get"
        },
        {
          "type": "SYMBOL",
          "name": "pipe_interior"
        }
      ]
    },
    "pipe_call": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "call_ordered"
        },
        {
          "type": "SYMBOL",
          "name": "call_unordered"
        }
      ]
    },
    "call_ordered": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "expr"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "expr"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "call_unordered": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "arg_mapping"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "arg_mapping"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "arg_mapping": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "name"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "arg_mapping_to"
            },
            {
              "type": "BLANK"
            }
          ]
        }
      ]
    },
    "arg_mapping_to": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ":"
        },
        {
          "type": "SYMBOL",
          "name": "expr"
        }
      ]
    },
    "pipe_infix": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "|"
        },
        {
          "type": "SYMBOL",
          "name": "ref"
        },
        {
          "type": "SYMBOL",
          "name": "pipe_call"
        }
      ]
    },
    "pipe_cast": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "SYMBOL",
          "name": "cast"
        }
      ]
    },
    "pipe_get": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "SYMBOL",
          "name": "name"
        }
      ]
    },
    "pipe_interior": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "."
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "ref_base"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "term": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "infix_term"
        },
        {
          "type": "SYMBOL",
          "name": "lambda"
        },
        {
          "type": "SYMBOL",
          "name": "if"
        },
        {
          "type": "SYMBOL",
          "name": "when"
        },
        {
          "type": "SYMBOL",
          "name": "block"
        },
        {
          "type": "SYMBOL",
          "name": "ref_term"
        },
        {
          "type": "SYMBOL",
          "name": "int"
        },
        {
          "type": "SYMBOL",
          "name": "float"
        },
        {
          "type": "SYMBOL",
          "name": "char"
        },
        {
          "type": "SYMBOL",
          "name": "bytes"
        },
        {
          "type": "SYMBOL",
          "name": "string"
        }
      ]
    },
    "infix_term": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "infix_left"
        },
        {
          "type": "SYMBOL",
          "name": "operator"
        },
        {
          "type": "SYMBOL",
          "name": "infix_right"
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "infix_left": {
      "type": "SYMBOL",
      "name": "expr"
    },
    "operator": {
      "type": "SYMBOL",
      "name": "ref"
    },
    "infix_right": {
      "type": "SYMBOL",
      "name": "expr"
    },
    "lambda": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "pattern"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "lambda_self"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "=>"
        },
        {
          "type": "SYMBOL",
          "name": "expr"
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "lambda_self": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "&"
        },
        {
          "type": "SYMBOL",
          "name": "name"
        }
      ]
    },
    "pattern": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "pattern_single"
        },
        {
          "type": "SYMBOL",
          "name": "pattern_multiple"
        }
      ]
    },
    "pattern_single": {
      "type": "SYMBOL",
      "name": "name"
    },
    "pattern_multiple": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "name"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "name"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "if": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "if"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "cond"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "cond"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "SYMBOL",
          "name": "if_yes"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "elif"
          }
        },
        {
          "type": "STRING",
          "value": "else"
        },
        {
          "type": "SYMBOL",
          "name": "if_no"
        }
      ]
    },
    "cond": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "cond_pattern"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "expr"
        }
      ]
    },
    "cond_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "let"
        },
        {
          "type": "SYMBOL",
          "name": "pattern"
        },
        {
          "type": "STRING",
          "value": "="
        }
      ]
    },
    "if_yes": {
      "type": "SYMBOL",
      "name": "block"
    },
    "if_no": {
      "type": "SYMBOL",
      "name": "block"
    },
    "elif": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "if"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "cond"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "cond"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "SYMBOL",
          "name": "block"
        }
      ]
    },
    "when": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "when"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "SYMBOL",
          "name": "expr"
        },
        {
          "type": "STRING",
          "value": ")"
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "case"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": ","
                  },
                  {
                    "type": "SYMBOL",
                    "name": "case"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "case": {
      "type": "SEQ",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "name"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SEQ",
                "members": [
                  {
                    "type": "STRING",
                    "value": "|"
                  },
                  {
                    "type": "SYMBOL",
                    "name": "name"
                  }
                ]
              }
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "pattern"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": "=>"
        },
        {
          "type": "SYMBOL",
          "name": "expr"
        }
      ]
    },
    "block": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "binding"
          }
        },
        {
          "type": "SYMBOL",
          "name": "expr"
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "binding": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "binding_plain"
        },
        {
          "type": "SYMBOL",
          "name": "binding_cps"
        }
      ]
    },
    "binding_plain": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "let"
        },
        {
          "type": "SYMBOL",
          "name": "pattern"
        },
        {
          "type": "STRING",
          "value": "="
        },
        {
          "type": "SYMBOL",
          "name": "expr"
        },
        {
          "type": "STRING",
          "value": ","
        }
      ]
    },
    "binding_cps": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "@"
        },
        {
          "type": "SYMBOL",
          "name": "ref"
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "cps_pattern"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "expr"
        },
        {
          "type": "STRING",
          "value": ","
        }
      ]
    },
    "cps_pattern": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "pattern"
        },
        {
          "type": "STRING",
          "value": "="
        }
      ]
    },
    "ref_term": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "new"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SYMBOL",
          "name": "ref"
        }
      ]
    },
    "int": {
      "type": "PATTERN",
      "value": "\\-?0[xX][0-9A-Fa-f]+|\\-?0[oO][0-7]+|\\-?0[bB][01]+|\\-?\\d+"
    },
    "float": {
      "type": "PATTERN",
      "value": "\\-?\\d+(\\.\\d+)?[Ee][\\+\\-]?\\d+|\\-?\\d+\\.\\d+"
    },
    "char": {
      "type": "PATTERN",
      "value": "`.`|\\\\u[0-9A-Fa-f]+|\\\\[a-z]"
    },
    "bytes": {
      "type": "REPEAT1",
      "content": {
        "type": "SYMBOL",
        "name": "byte"
      }
    },
    "byte": {
      "type": "PATTERN",
      "value": "\\\\x[0-9A-Fa-f][0-9A-Fa-f]"
    },
    "string": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "text"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "string_part"
          }
        }
      ]
    },
    "text": {
      "type": "PATTERN",
      "value": "'[^']*'|\"[^\"]*\""
    },
    "string_part": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": ".."
        },
        {
          "type": "SYMBOL",
          "name": "string_part_content"
        }
      ]
    },
    "string_part_content": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "text"
        },
        {
          "type": "SYMBOL",
          "name": "char"
        }
      ]
    },
    "tree_sitter_ignore_rule": {
      "type": "PATTERN",
      "value": "\\/\\/[^\\n]*|\\/\\*([^\\*\\/]|\\*[^\\/]|[^\\*]\\/)*\\*\\/"
    }
  },
  "extras": [
    {
      "type": "SYMBOL",
      "name": "tree_sitter_ignore_rule"
    },
    {
      "type": "PATTERN",
      "value": "[ \\t\\r　]+"
    },
    {
      "type": "PATTERN",
      "value": "[\\n]+"
    }
  ],
  "conflicts": [],
  "externals": [],
  "inline": [],
  "supertypes": []
}

